Implement the Alt-number quick bookmark shortcuts
authorFederico Mena Quintero <federico@gnome.org>
Mon, 10 Dec 2012 22:00:42 +0000 (16:00 -0600)
committerFederico Mena Quintero <federico@gnome.org>
Mon, 10 Dec 2012 22:00:42 +0000 (16:00 -0600)
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
gtk/gtkfilechooserdefault.c
gtk/gtkplacessidebar.c
gtk/gtkplacessidebar.h

index cd86086e2dc85f0e9e65dfd1ab1dadeab7957b06..f0986d1f431d81b726b255e724ca3ad6cddce79e 100644 (file)
@@ -7560,24 +7560,15 @@ static void
 quick_bookmark_handler (GtkFileChooserDefault *impl,
                        gint bookmark_index)
 {
-#if REMOVE_FOR_PLACES_SIDEBAR
-  int bookmark_pos;
-  GtkTreePath *path;
-
-  if (bookmark_index < 0 || bookmark_index >= impl->num_bookmarks)
-    return;
-
-  bookmark_pos = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS) + bookmark_index;
+  GFile *file;
 
-  path = gtk_tree_path_new_from_indices (bookmark_pos, -1);
+  file = gtk_places_sidebar_get_nth_bookmark (GTK_PLACES_SIDEBAR (impl->places_sidebar), bookmark_index);
 
-  gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view),
-                               path, NULL,
-                               FALSE, 0.0, 0.0);
-  gtk_tree_path_free (path);
-
-  switch_to_shortcut (impl, bookmark_pos);
-#endif
+  if (file)
+    {
+      change_folder_and_display_error (impl, file, FALSE);
+      g_object_unref (file);
+    }
 }
 
 static void
index 8f98d9797ecd810f7f3885822379dfd8f555c849..320f3b340f76e976497377775b851d013fdb4bda 100644 (file)
@@ -4165,3 +4165,42 @@ gtk_places_sidebar_list_shortcuts (GtkPlacesSidebar *sidebar)
 
        return g_slist_copy_deep (sidebar->shortcuts, (GCopyFunc) g_object_ref, NULL);
 }
+
+GFile *
+gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, int n)
+{
+       GtkTreeIter iter;
+       int k;
+       GFile *file;
+
+       g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), NULL);
+
+       file = NULL;
+
+       if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) {
+               k = 0;
+
+               do {
+                       PlaceType place_type;
+                       char *uri;
+
+                       gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter,
+                                           PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type,
+                                           PLACES_SIDEBAR_COLUMN_URI, &uri,
+                                           -1);
+
+                       if (place_type == PLACES_BOOKMARK) {
+                               if (k == n) {
+                                       file = g_file_new_for_uri (uri);
+                                       g_free (uri);
+                                       break;
+                               }
+
+                               g_free (uri);
+                               k++;
+                       }
+               } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter));
+       }
+
+       return file;
+}
index c9eb5da27af31820b7527a3cf93b6da1273a5ab8..72b185c0c4d41b1af3bbac9bf8f2d095953427c4 100644 (file)
@@ -76,6 +76,8 @@ gboolean gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *loca
 gboolean gtk_places_sidebar_remove_shortcut (GtkPlacesSidebar *sidebar, GFile *location, GError **error);
 GSList *gtk_places_sidebar_list_shortcuts (GtkPlacesSidebar *sidebar);
 
+GFile *gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, int n);
+
 G_END_DECLS
 
 #endif /* __GTK_PLACES_SIDEBAR_H__ */